<template>
    <div>
        <h2>vuex使用</h2>
        <button @click="changevuex">修改vuex</button>
        mapstate使用的值: {{ userInfo }}- <br />
        mapgetters处理之后的vuex的值:
        {{ usernames }}
        组件2
        <Brother></Brother>
        路由传递过来的参数:---{{ routerParams }}
    </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from "vuex";
import Brother from "./Brother1.vue";
export default {
    components: { Brother },
    props: {},
    data() {
        return {
            routerParams: ""
        };
    },
    // 计算属性里面
    computed: {
        userInfo() {
            return this.$store.state.myInfo.userInfo.username
                ? this.$store.state.myInfo.userInfo
                : JSON.parse(sessionStorage.getItem("userInfo"));
        },
        // ...mapState("myInfo", ["userInfo", "like"]),
        ...mapGetters("myInfo", ["usernames"])
    },
    methods: {
        changevuex() {
            this.$store.dispatch("myInfo/changeUser", "温舒莹");
            // this.$store.commit("myInfo/CHANGEUSERNAME", "刘旭阳");
        }
    },
    watch: {
        $route: {
            handler: (val, oldVal) => {
                console.log("====", val);
            }
            // immediate: true
            // deep: true
        }
    },
    created() {
        console.log("this.$route.params", this.$route.params);
        this.routerParams = this.$route.params;
    },
    mounted() {},
    beforeRouteEnter(to, from, next) {
        console.log("beforeRouteEnter");
        next();
        // 在渲染该组件的对应路由被验证前调用
        // 不能获取组件实例 `this` ！
        // 因为当守卫执行时，组件实例还没被创建！
    },
    beforeRouteUpdate(to, from, next) {
        console.log("beforeRouteUpdate");
        next();
        // 在当前路由改变，但是该组件被复用时调用
        // 举例来说，对于一个带有动态参数的路径 `/users/:id`，在 `/users/1` 和 `/users/2` 之间跳转的时候，
        // 由于会渲染同样的 `UserDetails` 组件，因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
        // 因为在这种情况发生的时候，组件已经挂载好了，导航守卫可以访问组件实例 `this`
    },
    beforeRouteLeave(to, from, next) {
        console.log("beforeRouteLeave");
        next();
        // 在导航离开渲染该组件的对应路由时调用
        // 与 `beforeRouteUpdate` 一样，它可以访问组件实例 `this`
    }
};
</script>
<style scoped></style>
